/**
 * 手机环境数据标记工具类
 * 支持多种存储方式：HTML5+ API、localStorage、sessionStorage、uni-app
 */

export const StorageUtils = {
    // localStorage 方式
    setLocalData(key, value) {
        try {
            localStorage.setItem(key, JSON.stringify(value))
            return true
        } catch (e) {
            console.error('localStorage 设置失败:', e)
            return false
        }
    },

    getLocalData(key, defaultValue = null) {
        try {
            const value = localStorage.getItem(key)
            return value ? JSON.parse(value) : defaultValue
        } catch (e) {
            console.error('localStorage 读取失败:', e)
            return defaultValue
        }
    },

    // sessionStorage 方式
    setSessionData(key, value) {
        try {
            sessionStorage.setItem(key, JSON.stringify(value))
            return true
        } catch (e) {
            console.error('sessionStorage 设置失败:', e)
            return false
        }
    },

    getSessionData(key, defaultValue = null) {
        try {
            const value = sessionStorage.getItem(key)
            return value ? JSON.parse(value) : defaultValue
        } catch (e) {
            console.error('sessionStorage 读取失败:', e)
            return defaultValue
        }
    },

    // uni-app 方式 (如果项目支持 uni-app)
    setUniData(key, value) {
        try {
            if (typeof uni !== 'undefined') {
                uni.setStorageSync(key, value)
                return true
            }
            return false
        } catch (e) {
            console.error('uni-app 设置失败:', e)
            return false
        }
    },

    getUniData(key, defaultValue = null) {
        try {
            if (typeof uni !== 'undefined') {
                return uni.getStorageSync(key) || defaultValue
            }
            return defaultValue
        } catch (e) {
            console.error('uni-app 读取失败:', e)
            return defaultValue
        }
    },

    // HTML5+ API 方式 (当前项目使用的方式)
    setPlusData(key, value) {
        try {
            if (typeof window !== 'undefined' && window.plus && window.plus.storage) {
                window.plus.storage.setItem(key, JSON.stringify(value))
                return true
            }
            return false
        } catch (e) {
            console.error('HTML5+ 设置失败:', e)
            return false
        }
    },

    getPlusData(key, defaultValue = null) {
        try {
            if (typeof window !== 'undefined' && window.plus && window.plus.storage) {
                const value = window.plus.storage.getItem(key)
                return value ? JSON.parse(value) : defaultValue
            }
            return defaultValue
        } catch (e) {
            console.error('HTML5+ 读取失败:', e)
            return defaultValue
        }
    },

    // 通用方法：优先使用 HTML5+，其次 localStorage
    setData(key, value) {
        // 优先使用 HTML5+ API
        if (this.setPlusData(key, value)) {
            return true
        }
        // 降级到 localStorage
        return this.setLocalData(key, value)
    },

    getData(key, defaultValue = null) {
        // 优先使用 HTML5+ API
        const plusValue = this.getPlusData(key, null)
        if (plusValue !== null) {
            return plusValue
        }
        // 降级到 localStorage
        return this.getLocalData(key, defaultValue)
    },

    // 删除数据
    removeData(key) {
        try {
            if (typeof window !== 'undefined' && window.plus && window.plus.storage) {
                window.plus.storage.removeItem(key)
            }
            localStorage.removeItem(key)
            sessionStorage.removeItem(key)
            if (typeof uni !== 'undefined') {
                uni.removeStorageSync(key)
            }
            return true
        } catch (e) {
            console.error('删除数据失败:', e)
            return false
        }
    },

    // 清空所有数据
    clearAllData() {
        try {
            if (typeof window !== 'undefined' && window.plus && window.plus.storage) {
                window.plus.storage.clear()
            }
            localStorage.clear()
            sessionStorage.clear()
            if (typeof uni !== 'undefined') {
                uni.clearStorageSync()
            }
            return true
        } catch (e) {
            console.error('清空数据失败:', e)
            return false
        }
    },

    // 应用启动检测和重置功能
    isAppFirstLaunch() {
        const lastLaunchTime = this.getData('app_last_launch_time', null)
        const currentTime = new Date().getTime()

        // 如果从未启动过，或者距离上次启动超过1小时，认为是新启动
        if (!lastLaunchTime || (currentTime - lastLaunchTime) > 3600000) {
            this.setData('app_last_launch_time', currentTime)
            return true
        }

        this.setData('app_last_launch_time', currentTime)
        return false
    },

    // 重置特定标记（每次应用启动时调用）
    resetAppLaunchFlags() {
        const flagsToReset = [
            'box6_seen',
            'box7_seen',
            'box8_seen',
            'box9_seen',
            'box10_seen',
            'box11_seen',
            'box12_seen',
            'box13_seen',
            'box14_seen'
        ]

        flagsToReset.forEach(flag => {
            this.removeData(flag)
        })

        console.log('应用启动标记已重置')
    },

    // 检查并重置应用启动状态
    checkAndResetAppLaunch() {
        if (this.isAppFirstLaunch()) {
            this.resetAppLaunchFlags()
            return true
        }
        return false
    }
}

// 使用示例：
/*
// 保存数据
StorageUtils.setData('user_id', '12345')
StorageUtils.setData('user_name', '张三')
StorageUtils.setData('last_visit', new Date().toISOString())

// 读取数据
const userId = StorageUtils.getData('user_id', '')
const userName = StorageUtils.getData('user_name', '')
const lastVisit = StorageUtils.getData('last_visit', null)

// 检查是否已访问
const hasVisited = StorageUtils.getData('box6_seen', false)
if (!hasVisited) {
    StorageUtils.setData('box6_seen', true)
    // 执行首次访问逻辑
}

// 计数器
const visitCount = StorageUtils.getData('visit_count', 0)
StorageUtils.setData('visit_count', visitCount + 1)
*/
